const express = require('express');
const multer = require('multer');
const fs = require('fs');
const path = require('path');
const assParser = require('ass-parser');
const cors = require('cors');

// const app = express();
// const port = 9030;

// 设置文件存储位置
// const uploadDir = path.join(__dirname, 'download');
// if (!fs.existsSync(uploadDir)) {
//     fs.mkdirSync(uploadDir);
// }
// const storage = multer.diskStorage({
//     destination: (req, file, cb) => {
//         cb(null, uploadDir);
//     },
//     filename: (req, file, cb) => {
//         cb(null, file.originalname);
//     }
// });
// const upload = multer({ storage });

// 修改上传文件接口，记录ID和相关文件
// app.post('/upload', upload.single('subtitleFile'), (req, res) => {
//     const uploadedFilePath = path.join(uploadDir, req.file.filename);
//     const outputFilePathBase = path.join(uploadDir, path.parse(req.file.filename).name);

//     try {
//         convertSubtitle(uploadedFilePath, outputFilePathBase);

//         // 准备回传的文件路径
//         const combinedFile = `${outputFilePathBase}_combined.srt`;
//         const chineseFile = `${outputFilePathBase}_chinese.srt`;
//         const englishFile = `${outputFilePathBase}_english.srt`;

//         res.json({
//             combined: `/download/${path.basename(combinedFile)}`,
//             chinese: `/download/${path.basename(chineseFile)}`,
//             english: `/download/${path.basename(englishFile)}`
//         });
//     } catch (error) {
//         console.error('处理文件时出错:', error);
//         res.status(500).send('文件处理失败！');
//     }
// });

// // 提供静态文件下载服务
// app.use('/download', express.static(uploadDir));

// // 更新 CORS 配置，允许特定来源
// app.use(cors({
//     origin: 'http://192.168.1.73:9031/', // 允许的前端地址
//     methods: ['GET', 'POST'], // 允许的请求方法
//     allowedHeaders: ['Content-Type'] // 允许的请求头
// }));

// // 启动服务器
// app.listen(port, () => {
//     console.log(`服务器已启动，访问地址：http://192.168.1.73:${port}`);
// });

// 格式化时间为SRT格式 (hh:mm:ss,ms)
function formatTime(time) {
    const hours = Math.floor(time / 3600);
    const minutes = Math.floor((time % 3600) / 60);
    const seconds = Math.floor(time % 60);
    const milliseconds = Math.floor((time % 1) * 1000);

    return `${pad(hours)}:${pad(minutes)}:${pad(seconds)},${pad(milliseconds, 3)}`;
}

// 补零函数
function pad(num, size = 2) {
    let s = String(num);
    while (s.length < size) s = '0' + s;
    return s;
}

// 解析时间字符串为秒数
function parseTime(timeString) {
    const [h, m, s] = timeString.split(':').map(Number);
    return h * 3600 + m * 60 + s;
}

// 修改转换字幕文件的函数
function convertSubtitle(inputFilePath, outputFilePathBase) {
    const content = fs.readFileSync(inputFilePath, 'utf-8');

    // 解析ASS字幕文件
    const parsedAss = assParser(content);

    // 确保解析结果包含事件部分
    const events = parsedAss.find(section => section.section === 'Events');
    if (!events || !events.body) {
        console.error(`无法解析字幕文件: ${inputFilePath}`);
        return;
    }

    // 提取字幕事件并分类为中英文字幕
    const subtitles = events.body
        .filter(event => event.key === 'Dialogue')
        .map(event => {
            const startTime = formatTime(parseTime(event.value.Start));
            const endTime = formatTime(parseTime(event.value.End));
            const text = event.value.Text
                .replace(/\\N/g, '\n') // 替换换行符
                .replace(/\{.*?\}/g, '') // 删除多余的格式信息
                .trim();

            return { startTime, endTime, text };
        });

    // 生成中英文字幕文件
    const combinedContent = subtitles
        .map((sub, index) => `${index + 1}\n${sub.startTime} --> ${sub.endTime}\n${sub.text}\n`)
        .join('\n');
    fs.writeFileSync(`${outputFilePathBase}_combined.srt`, combinedContent, 'utf-8');

    // 生成中文字幕文件（删除英文行）
    const chineseContent = subtitles
        .map((sub, index) => {
            const chineseText = sub.text
                .split('\n')
                .filter(line => /[\u4e00-\u9fa5]/.test(line)) // 保留中文部分
                .join('\n');
            return chineseText ? `${index + 1}\n${sub.startTime} --> ${sub.endTime}\n${chineseText}\n` : null;
        })
        .filter(Boolean) // 移除空条目
        .join('\n');
    fs.writeFileSync(`${outputFilePathBase}_chinese.srt`, chineseContent, 'utf-8');

    // 生成英文字幕文件（删除中文行）
    const englishContent = subtitles
        .map((sub, index) => {
            const englishText = sub.text
                .split('\n')
                .filter(line => !/[\u4e00-\u9fa5]/.test(line)) // 保留英文部分
                .join('\n');
            return englishText ? `${index + 1}\n${sub.startTime} --> ${sub.endTime}\n${englishText}\n` : null;
        })
        .filter(Boolean) // 移除空条目
        .join('\n');
    fs.writeFileSync(`${outputFilePathBase}_english.srt`, englishContent, 'utf-8');

    console.log(`转换完成: ${inputFilePath} -> ${outputFilePathBase}_*.srt`);
}

// 添加一个简单的POST测试端点
// app.post('/test', (req, res) => {
//     console.log('收到测试请求');
//     res.json({ success: true, message: '测试成功' });
// });

// // 提供静态文件服务，通过9031端口访问web目录
// const webApp = express();
// const webPort = 9031;
// webApp.use(express.static(path.join(__dirname, 'web')));
// webApp.listen(webPort, () => {
//     console.log(`Web服务器已启动，访问地址：http://127.0.0.1:9031/upload.html`);
// });